Modelling TB in possum populations
  • Introduction
  • Transmission rate
  • Mortality rate
  • Carrying capacity
  • Additional remarks
  • Extenstions to the model

On this page

  • Mortality rate
    • What happens if the mortality rate is dependent on the age groups?
  • Age-Dependent Mortality in Possums

Mortality rate

Author

Elena Colman & Fiona Harris

Mortality rate

What happens if the mortality rate is dependent on the age groups?

Mortality dependent on age groups

To explore the effects of age-specific mortality on TB dynamics, we adapted the model to allow different natural and disease-induced death rates for juveniles and adults. This modification can reflect biological differences such as increased vulnerability in young possums and resilience in older individuals.

  • Natural mortality in juveniles: \(\mu_1\)

  • Natural mortality in adults: \(\mu_2\)

  • TB-specific mortality in juveniles: \(\tau_1\)

  • TB-specific mortality in adults: \(\tau_2\)

The sliders below offer a way to simulate realistic demographic vulnerabilities in a possum den and observe how age-specific survival shapes epidemic outcomes.

Age-Dependent Mortality in Possums

Show code
viewof tau1 = Inputs.range([0.1, 3], {step: 0.3, label: "TB Mortality (Juveniles)"})
viewof tau2 = Inputs.range([0.1, 3], {step: 0.3, label: "TB Mortality (Adults)"})
viewof mu1 = Inputs.range([0.1, 1], {step: 0.1, label: "Natural Mortality (Juveniles)"})
viewof mu2 = Inputs.range([0.1, 1], {step: 0.1, label: "Natural Mortality(Adults)"})

filteredMortality = mortality_data.filter(d =>
  d.tau1 === tau1 &&
  d.tau2 === tau2 &&
  d.mu1 === mu1 &&
  d.mu2 === mu2 )



mortality_long = filteredMortality.flatMap(d => [
  { time: d.time, Deaths: d.natural_deaths_juveniles, Type: "Natural mortality in juveniles" },
  { time: d.time, Deaths: d.natural_deaths_adults, Type: "Natural mortality in adults" },
    { time: d.time, Deaths: d.natural_deaths_total, Type: "Total natural mortality" },
  { time: d.time, Deaths: d.tb_deaths_juveniles, Type: "TB Juveniles" },
  { time: d.time, Deaths: d.tb_deaths_adults, Type: "TB Adults" },
  { time: d.time, Deaths: d.tb_deaths_total, Type: "Total TB Mortality" }
])


compartment_mortality = filteredMortality.flatMap(d => [
  { time: d.time, Count: d.SJ, Compartment: "Susceptible Juveniles" },
  { time: d.time, Count: d.EJ, Compartment: "Exposed Juveniles" },
  { time: d.time, Count: d.IJ, Compartment: "Infectious Juveniles" },
  { time: d.time, Count: d.SAd, Compartment: "Susceptible Adults" },
  { time: d.time, Count: d.EAd, Compartment: "Exposed Adults" },
  { time: d.time, Count: d.IAd, Compartment: "Infectious Adults" }
])
Show code
//| echo: false

html`<div style="display: flex; gap: 2rem;">
  <div style="width: 250px;">
    <p><strong>Mortality rates</strong></p>
    ${viewof tau1}
    ${viewof tau2}
    ${viewof mu1}
    ${viewof mu2}
    <p style="font-size: 0.9em;">
<strong>Key patterns:</strong>
<strong>Higher juvenile TB mortality</strong> tends to reduce the number of infectious juveniles. In extreme cases, this can nearly eliminate infection in juveniles due to early death before transmission.

<strong>Increasing juvenile natural mortality </strong> has a compounding effect, reducing the total number of young possums—especially susceptible ones—and shifting the population structure toward adults.

<strong>Adult TB mortality</strong> strongly influences the total number of infectious adults. High values lead to rapid declines in $I_A$, which can reduce overall TB burden but may also decrease population size if too many breeding adults die.

<strong>Adult natural mortality</strong> moderates long-term population dynamics. Higher rates lower the number of adults, and if combined with low juvenile survival, can lead to population decline.

<strong>Total TB mortality</strong> tends to be more sensitive to changes in adult parameters due to the larger initial adult population, though juveniles can disproportionately contribute when (${tex`\tau_1`}) is high.
    
    </p>
  </div>

  <div>
    <h3>Age-dependent mortality</h3>

    <p><em>TB Infection Model</em></p>
  
    ${Plot.plot({
    marks: [
    Plot.lineY(compartment_mortality, {
    x: "time",
    y: "Count",
    stroke: "Compartment"
  }),
  ],
  color: {
    domain: [
      "Susceptible Juveniles",
      "Exposed Juveniles",
      "Infectious Juveniles",
      "Susceptible Adults",
      "Exposed Adults",
      "Infectious Adults"
    ],
    range: ["blue", "orange", "red", "green", "purple", "brown"],
    type: "ordinal",
    legend: true, 
    label: "Compartment"
  },
  x: { label: "Time (Years)" },
  y: { label: "Number of Possums" },
  width: 700,
  height: 350,
  marginLeft: 50,
  marginBottom: 40
})}
 
  
  
  <p><em>Total population over time</em></p>

    ${Plot.lineY(filteredMortality, {
      x: "time",
      y: (d) => d.SJ + d.EJ + d.IJ + d.SAd + d.EAd + d.IAd,
      stroke: "steelblue"
    }).plot({
      y: {label: "Total Population"},
      x: {label: "Time (Years)"},
      marginLeft: 50,
      marginBottom: 40,
      width: 600,
      height: 300
    })}
 
    

    <p><em>Mortality Over Time</em></p>
    ${Plot.plot({
      marks: [Plot.lineY(mortality_long, {
        x: "time",
        y: "Deaths",
        stroke: "Type"
      })],
      
      color: {
  domain: [
    "Natural mortality in juveniles",
    "Natural mortality in adults",
    "Total natural mortality",
    "TB Juveniles",
    "TB Adults",
    "Total TB Mortality"
  ],
  range: ["green", "red", "orange", "black"],
  type: "ordinal",
  label: "Mortality Type",
  legend: true
      },
      x: {label: "Time (Years)"},
      y: {label: "Deaths per Unit Time"},
      width: 700,
      height: 350
    })}
  </div>
</div>`